package Question18_12;
import CtCILibrary.AssortedMethods;
public class QuestionC {
public static void clearArray(int[] array) {
for (int i = 0; i < array.length; i++) {
array[i] = 0;
}
}
public static int maxSubMatrix(int[][] matrix) {
int rowCount = matrix.length;
int colCount = matrix[0].length;
int[] partialSum = new int[colCount];
int maxSum = 0; // Max sum is an empty matrix
for (int rowStart = 0; rowStart < rowCount; rowStart++) {
clearArray(partialSum);
for (int rowEnd = rowStart; rowEnd < rowCount; rowEnd++) {
for (int i = 0; i < colCount; i++) {
partialSum[i] += matrix[rowEnd][i];
}
int tempMaxSum = maxSubArray(partialSum, colCount);
// if you want to track the coordinates, add code here to do that
maxSum = Math.max(maxSum, tempMaxSum);
}
}
return maxSum;
}
public static int maxSubArray(int array[], int N) {
int maxSum = 0;
int runningSum = 0;
for (int i = 0; i < N; i++) {
runningSum += array[i];
maxSum = Math.max(maxSum, runningSum);
/* If running_sum is < 0 no point in trying to continue the
* series. Reset. */
if (runningSum < 0) {
runningSum = 0;
}
}
return maxSum;
}
public static void main(String[] args) {
int[][] matrix = AssortedMethods.randomMatrix(5, 7, -100, 100);
int sum = maxSubMatrix(matrix);
AssortedMethods.printMatrix(matrix);
System.out.println(sum);
}
}